package matchs

import (
	"github.com/flipped-aurora/gin-vue-admin/server/global"
	"time"
)

// MatchAskTask 问问任务表模型
type MatchAskTask struct {
	global.GVA_MODEL
	UserID                uint64    `gorm:"column:user_id;type:bigint unsigned;not null;comment:'发起者用户ID（关联system.SysUser）'" json:"userId"`
	TargetProfessionalIDs string    `gorm:"column:target_professional_ids;type:varchar(512);not null;comment:'目标专业ID列表（JSON数组）'" json:"targetProfessionalIds"`
	Content               string    `gorm:"column:content;type:text;not null;comment:'问题内容文本'" json:"content"`
	IsAnonymous           int8      `gorm:"column:is_anonymous;type:tinyint;not null;default:0;comment:'是否匿名发起：0-实名 1-匿名'" json:"isAnonymous"`
	Status                int8      `gorm:"column:status;type:tinyint;not null;default:0;comment:'任务状态：0-待匹配 1-匹配中 2-已收到回复 3-已接受回复 4-已结束 5-已超时'" json:"status"`
	ExpireAt              time.Time `gorm:"column:expire_at;type:datetime;not null;comment:'过期时间（默认创建后24小时）'" json:"expireAt"`
	ReplyCount            int       `gorm:"column:reply_count;type:int;not null;default:0;comment:'收到的回复数量'" json:"replyCount"`
	SelectedReplyID       uint64    `gorm:"column:selected_reply_id;type:bigint unsigned;default:0;comment:'被选中的回复ID（关联match_ask_reply.id）'" json:"selectedReplyId"`
	CompletedAt           time.Time `gorm:"column:completed_at;type:datetime;default:null;comment:'任务完成时间（接受回复时设置）'" json:"completedAt"`
	// 请在MatchAskTask结构体中添加以下字段
	PushedCount      int       `gorm:"column:pushed_count;type:int;not null;default:0;comment:'已推送次数'" json:"pushedCount"`
	RemainingMinutes int       `gorm:"column:remaining_minutes;type:int;not null;default:1440;comment:'剩余匹配分钟数（默认24小时）'" json:"remainingMinutes"`
}

// TableName 自定义表名（适配框架蛇形命名规范）
func (m *MatchAskTask) TableName() string {
	return "match_ask_task"
}

// Indexes 定义索引
func (MatchAskTask) Indexes() []string {
	return []string{
		"KEY idx_push_expire (pushed_count, remaining_minutes, status) COMMENT '筛选未达推送上限且未过期的问问'",
	}
}

// 状态枚举常量（业务代码直接引用，避免硬编码）
const (
	MatchAskStatusPending   = 0 // 待匹配（刚创建，未进入匹配队列）
	MatchAskStatusMatching  = 1 // 匹配中（已进入匹配队列，等待推荐给目标专业用户）
	MatchAskStatusReplied   = 2 // 已收到回复（有用户回复，但发起者未处理）
	MatchAskStatusAccepted  = 3 // 已接受回复（发起者选中某回复，进入聊天）
	MatchAskStatusCompleted = 4 // 已结束（聊天完成并评分）
	MatchAskStatusExpired   = 5 // 已超时（超过expire_at未收到回复或未处理）
)
